package com.giacom.docx4j.regra.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.giacom.document.CtRegra;
import com.giacom.document.CtRegra.Parametro;
import com.giacom.document.CtSecao;
import com.giacom.document.Documento;
import com.giacom.docx4j.motor.Resultado;
import com.giacom.docx4j.regra.IDocumentoRegra;

/**
 * Regra que implementa a obrigatoriedade de informacoes
 * @author sandro.giacomozzi
 */
public class Obrigatoria implements IDocumentoRegra {

	@Override
	public void execute(CtRegra regra, Documento templateXML,
			Documento runtimeXML) throws Exception {

		
		Map<String, String> param = new HashMap<String, String>();
		
		//seta os parametros
		List<Parametro> p = regra.getParametro();
		for (Parametro parametro : p) {
			param.put(parametro.getNome(), parametro.getValor());
		}

		//Verifica as sessoes obrigatorias
		List<CtSecao> confSessao = templateXML.getCorpo().getSecao();
		for (CtSecao ctSessao : confSessao) {
			List<CtSecao> runtimeSessao = runtimeXML.getCorpo().getSecao();
			
			System.out.println("Verificando sessao " + ctSessao.getIdSecao() + " - " + ctSessao.getNomeSecao());
			
			if(ctSessao.isObrigatorio() != null && ctSessao.isObrigatorio()){
				
				System.out.println("Sessao obrigatoria!");
				
				boolean achouSessao = false;	

				for (CtSecao ctSessao2 : runtimeSessao) {
					//pega pelo id da sessao e nome
					if(ctSessao.getIdSecao() == ctSessao2.getIdSecao() && 
							(ctSessao.getNomeSecao().equals(ctSessao2.getNomeSecao()))){
						
						System.out.println("Achou pelo id e nome");
						achouSessao = true;
						break;
						
					//tenta pelo nome da sessao	
					}else if (ctSessao.getNomeSecao().equals(ctSessao2.getNomeSecao())) {
						//
						System.out.println("Achou pelo nome");
						achouSessao = true;
						break;
					}
				}
			
				if(!achouSessao){
					//nao achou a sessao obrigatoria
					String message = "Nao foi encontrada a sessao obrigatoria: " + ctSessao.getIdSecao() + " - " + ctSessao.getNomeSecao();
					
					System.out.println(message);
					
					Resultado.getInstance().adicionaResultado(
							Resultado.TIPO.REGRA, Resultado.TIPO_RESULTADO.ALERTA,	message);
					
				}else{
					String message = "Sessao obrigatoria verificada: " + ctSessao.getIdSecao() + " - " + ctSessao.getNomeSecao();
					Resultado.getInstance().adicionaResultado(
							Resultado.TIPO.REGRA, Resultado.TIPO_RESULTADO.SUCESSO,	message);
				}
			
			}
			
		}
		
	}
	
}
